package com.bigintegerdemo;

import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.Random;

/**
 * @Auther: shiquan
 * @Date: 2024/10/24 - 10 - 24 -17:55
 */
public class BigIntegerDemo1 {

    public static void main(String[] args) {
        /*
        public BigInteger (int num, Random rnd)
         */


        //1 获取一个随机的大整数
       /* SecureRandom r = new SecureRandom();
        for (int i = 0; i < 100; i++) {
            BigInteger bd1 = new BigInteger(4,r); //生成一个最多有 4 位的随机大整数
            System.out.println(bd1);//[0到15 ]  0到2~4-1
        }*/

        //2 获取一个指定的大整数
         //细节: 必须是整数
        //BigInteger bd2 = new BigInteger("999999999999999999");
        //System.out.println(bd2);

        //BigInteger bd3 = new BigInteger("abc"); //abc 1.2 错
        //System.out.println(bd3);

        //3 获取指定进制的最大整数
        //细节 1必须是整数
        //2字符串的进制必须是0和1
        BigInteger bd4 = new BigInteger("100", 2);//  这里是转换为二进制
        System.out.println(bd4);

        //4静态方法获取BigInteger的对象  内部有优化
        //细节:  1表示范围小  只能在long取值范围里面  超出long范围就步行
        //  2在里面对常用数字  -16~16  进化了优化
        //3提前把-16~16先创建好BigInteger对象，如果多次获取不会重新创建新的
        BigInteger bd5 = BigInteger.valueOf(16);
        BigInteger bd6 = BigInteger.valueOf(16);
        System.out.println(bd5.equals(bd6)); //true

        BigInteger bd7 = BigInteger.valueOf(17);
        BigInteger bd8 = BigInteger.valueOf(17);
        System.out.println(bd7.equals(bd8)); //false
        
        //5 对象一旦创建内部的数据不能发生改变
        BigInteger bd9 = BigInteger.valueOf(1);
        BigInteger bd10 = BigInteger.valueOf(2);
        BigInteger result = bd9.add(bd10);
        System.out.println(result);  //3
        //不会修改参与计算的BigInteger对象里面的值  产生一个新的BigInteger对象记录3

        System.out.println(bd9.equals(result));//错
        System.out.println(bd10.equals(result));//错

    }
}
